package com.foreverwin.jzymes.common.service;

import com.foreverwin.jzymes.common.domain.CarrierBind;
import com.foreverwin.jzymes.common.domain.NcData;
import com.foreverwin.jzymes.production.sfc.domain.SFC;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface ICommonService {

    /**
     * 查询研磨工作中工令
     *
     * @param site
     * @param itemBo
     * @return
     */
    public List<SFC> findGrindSfcOnWork(String site, String itemBo );

    /**
     * 查询CNC工作中工令
     * 按时间排序取第一笔记录
     *
     * @param site
     * @param itemBo
     * @return
     */
    public List<SFC> findCNCSfcOnWork( String site, String itemBo );


    /**
     * 研磨产出更新工令
     *
     * @param site
     * @param itemBo
     * @param needQty
     * @param resource
     * @param updateDate
     */
    public void updateGrindSfcForPass(String site, String itemBo, Long needQty, String resource, Date updateDate );

    /**
     * 研磨报废更新工令已下达数量、制程报废数量，保存不良数量
     *
     * @param site
     * @param itemBo
     * @param resource
     * @param ncCode
     * @param scrapQty
     * @param updateDate
     */
    public void updateGrindSfcForScrap( String site, String itemBo, String resource, String ncCode, Long scrapQty, Date updateDate );

    /**
     * 本体过站
     *
     * @param site
     * @param carrier
     * @param resource
     * @param passDate
     */
    public Map<String,String> sfcPassByCarrier( String site, String carrier, String resource, Date passDate );

    /**
     * 本体过站
     *
     * @param site
     * @param carrier
     * @param operation
     * @param passDate
     * @return
     */
    public Map<String,String> sfcPassByCarrierOnOperation( String site, String carrier, String operation, Date passDate );

    /**
     * 工令数量过站
     *
     * @param site
     * @param resource
     * @param passQty
     * @param passDate
     */
    public void sfcPassByQty( String site, String resource, Long passQty, Date passDate );

    /**
     * 工令数量过站
     *
     * @param site
     * @param itemBo
     * @param carrier
     * @param dateCode
     * @param resource
     * @param passQty
     * @param passDate
     * @return
     */
    public List<String> sfcPassByQty(String site, String itemBo, String carrier, String dateCode, String resource, String operation, Long passQty, Date passDate );

    /**
     * 获取工序默认资源
     * @param site
     * @param operation
     * @return
     */
    public String findOperationDefaultResource( String site, String operation );

    /**
     * 查询工令在工序排队中数量
     *
     * @param site
     * @param sfc
     * @param operation
     * @return
     */
    public Long findSfcQtyInQueueOnOperation( String site, String sfc, String operation );


    /**
     * 检查本体在工序是否已过站
     *
     * @param carrierBind
     * @param passOperation
     * @return
     */
    public boolean checkCarrierPassOnOperation(CarrierBind carrierBind, String passOperation );

    /**
     * 查询下一个工序
     *
     * @param site
     * @param itemBo
     * @param operation
     * @return
     */
    public String findSfcNextOperation( String site, String itemBo, String operation );

    /**
     * 查询后面工序列表
     *
     * @param site
     * @param itemBo
     * @param operation
     * @return
     */
    public List<String> findSfcNextOperationList( String site, String itemBo, String operation );

    /**
     * 查询前面工序列表
     *
     * @param site
     * @param itemBo
     * @param operation
     * @return
     */
    public List<String> findSfcPrevOperationList( String site, String itemBo, String operation );

    /**
     * 查询前一工序
     *
     * @param site
     * @param itemBo
     * @param operation
     * @return
     */
    public String findSfcPrevOperation( String site, String itemBo, String operation );

    /**
     * 保存不良数据录入
     *
     * @param ncData
     * @param rework
     */
    public void saveNcData( NcData ncData, boolean rework );

    /**
     * 保存不良数据录入
     *
     * @param ncData
     * @param resource
     * @param operation
     * @param rework
     */
    public void saveNcData( NcData ncData, String resource, String operation,  boolean rework );

    /**
     * 报废Mes工令数量
     *
     * @param site
     * @param sfc
     * @param resource
     * @param scrapQty
     * @param scrapDate
     */
    public void scrapSfcQty( String site, String sfc, String resource, Long scrapQty, Date scrapDate );

    /**
     * 生成编号
     *
     * @param site
     * @return
     */
    public String generateOrderNo( String site, String orderNumberRule );

    /**
     * 扣减待过站批次过站记录数量
     *
     * @param site
     * @param itemBo
     * @param resource
     * @param qty
     */
    public void reduceOpenSfcBatchPassLogQty( String site, String itemBo, String resource, Long qty );

    /**
     * 查找工令物料
     *
     * @param site
     * @param itemBo
     * @return
     */
    public String findSfcItemByItem( String site, String itemBo );

    /**
     * 查询站点有效机种
     *
     * @param site
     * @param itemGroup
     * @return
     */
    //public List<Map<String,Object>> findItemGroupMember( String site, String itemGroup );


    /**
     * 查询物料所在机种
     *
     * @param site
     * @param itemBo
     * @return
     */
    public String findItemGroupByItem( String site, String itemBo );

    public void findItemTree( String site, String itemGroup, List<Map<String,Object>> itemTreeList, boolean refer, String itemType );

    public void findItemTree( String site, String itemGroup, List<Map<String, Object>> itemList, List<Map<String,Object>> itemTreeList, String itemType );

}
